home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / v10n22.arc / STATIC2.PAS < prev    next >
Pascal/Delphi Source File  |  1991-12-08  |  3KB  |  103 lines

  1. STATIC2.PAS
  2. COMPLETE LISTING
  3.  
  4.  
  5. PROGRAM Static2;
  6. USES Crt;
  7. VAR TickCount : LongInt ABSOLUTE $40:$6C;
  8. CONST
  9.   TypeStr : ARRAY[1..3] OF String[73] =
  10.     ('The quick brown fox jumped over the lazy dog.',
  11.      'Pack my box with five dozen liquor jugs.',
  12.      'Now is the time for all good persons '+
  13.      'to come to the aid of their country.');
  14.   TimeFactor = 2;
  15.  
  16.   PROCEDURE TickTock;
  17.   CONST TickWas : LongInt = 0;
  18.         High    : Boolean = TRUE;
  19.   BEGIN
  20.     IF TickCount >= TickWas + 9 THEN
  21.       BEGIN
  22.         IF High THEN Sound(1200) ELSE Sound(600);
  23.         High    := NOT High;
  24.         TickWas := TickCount;
  25.       END
  26.     ELSE IF TickCount > TickWas THEN NoSound;
  27.   END;
  28.  
  29.   PROCEDURE UpdateXY(VAR X, Y : Byte; Len : Byte);
  30.   BEGIN
  31.     Inc(X);
  32.     IF X > Len THEN
  33.       BEGIN
  34.         X := 1;
  35.         Inc(Y, 2);
  36.       END;
  37.   END;
  38.  
  39.   PROCEDURE TestString;
  40.   CONST X       : Byte = 1;
  41.         Y       : Byte = 1;
  42.         TickWas : LongInt = 0;
  43.   BEGIN
  44.     IF TickCount > TickWas + TimeFactor THEN
  45.       BEGIN
  46.         GotoXY(X, Y); Write(TypeStr[Succ(Y) DIV 2][X]);
  47.         UpdateXY(X, Y, Length(TypeStr[Succ(Y) DIV 2]));
  48.         IF Y > 5 THEN
  49.           BEGIN
  50.             GotoXY(1,24);
  51.             WriteLn('Sorry, you did not pass.');
  52.             NoSound; Halt;
  53.           END;
  54.          TickWas := TickCount;
  55.        END;
  56.   END;
  57.  
  58.   PROCEDURE YouType;
  59.   CONST X      : Byte = 1;
  60.         Y      : Byte = 2;
  61.         Errors : Word = 0;
  62.   VAR   C      : Char;
  63.         Hold   : Byte;
  64.   BEGIN
  65.     IF KeyPressed THEN
  66.       BEGIN
  67.         C := ReadKey;
  68.         IF C = #27 THEN BEGIN NoSound; Halt; END;
  69.         IF C = TypeStr[Y DIV 2][X] THEN
  70.           BEGIN
  71.             Hold := TextAttr; TextAttr := $0F;
  72.             GotoXY(X, Y); Write(C,' ');
  73.             UpdateXY(X, Y, Length(TypeStr[Y DIV 2]));
  74.             GotoXY(X, Y); Write(#219);
  75.             TextAttr := Hold;
  76.             IF Y > 6 THEN
  77.               BEGIN
  78.                 GotoXY(1,24);
  79.                 WriteLn('You passed with ',Errors,' errors.');
  80.                 NoSound; Halt;
  81.               END;
  82.           END
  83.         ELSE Inc(Errors);
  84.       END;
  85.   END;
  86.  
  87. BEGIN
  88.   TextAttr := $07; ClrScr;  GotoXY(1,25);
  89.   Write('TYPING TEST!  Three lines...');
  90.   GotoXY(1,1); Write(TypeStr[1]);
  91.   GotoXY(1,3); Write(TypeStr[2]);
  92.   GotoXY(1,5); Write(TypeStr[3]);
  93.   TextAttr := $0F; GotoXY(1,2); Write(#219);
  94.   TextAttr := $70;
  95.   REPEAT
  96.     TickTock;
  97.     TestString;
  98.     YouType;
  99.   UNTIL FALSE;
  100. END.
  101.  
  102.  
  103.